﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crosland.Automotriz.Core;
using System.Data;
using System.Data.SqlClient;
using Crosland.Automotriz.Entidad;


namespace Crosland.Automotriz.Data.Dao.Linq
{
    public class clsT_Con_Operacion_CabDAO
    {
        private readonly AutomotrizEntities ContextoDeObjs = new AutomotrizEntities();
        private readonly DM_CROSLAND_20130417Entities ContextoEntidad = new DM_CROSLAND_20130417Entities();

        public bool GuardarOperacionCab(T_CON_OPERACION_CAB entity)
        {
            try
            {
                ContextoDeObjs.ExecuteStoreCommand("exec USP_SAVE_T_CON_OPERACION_CAB @ID_USUARIO={0}, @DES_GLOSA={1},@FEC_OPERACION={2},@TIPO_CAMBIO={3},@ID_MONEDA={4}", entity.ID_USUARIO, entity.DES_GLOSA,entity.FEC_OPERACION,entity.IMP_TIPO_CAMBIO,entity.ID_MONEDA);
                return true;
            }
            catch (Exception)
            {

                return false;
            }

        }


     

        public int UltimoIdGenerado()
        {
            var max = 0;
            
            try
            {
                max = ContextoDeObjs.T_CON_OPERACION_CAB.Select(x => x.ID_OPERACION).Max();

            }
            catch (Exception)
            {
                return max;
            }

            return max;
           

        }

        public List<TD_Facturas_Compensadas> ListarFacturasCompensadas(int idOperacionCaja)
        {

            var p = new object[] { new SqlParameter("@ID", idOperacionCaja)};
            var resultado = ContextoEntidad.ExecuteStoreQuery<TD_Facturas_Compensadas>("exec USP_LISTAR_FACTURAS_COMPENSADAS @ID", p).AsQueryable().ToList();
            return resultado;
        
        }

        public List<TD_OPERACION_DEPOSITO_MAE> ListarDatosOperacionMae(int idOperacionCaja)
        {

            var p = new object[] { new SqlParameter("@ID", idOperacionCaja) };
            var resultado = ContextoEntidad.ExecuteStoreQuery<TD_OPERACION_DEPOSITO_MAE>("exec USP_MAE_CONSULTA_DEPOSITO @ID", p).AsQueryable().ToList();
            return resultado;

        }

        public List<TD_Facturas_Compensadas> ListarDatosOperacionDet(int idOperacion)
        {

            var p = new object[] { new SqlParameter("@ID_OPERACION", idOperacion) };
            var resultado = ContextoEntidad.ExecuteStoreQuery<TD_Facturas_Compensadas>("exec USP_DET_CONSULTA_DEPOSITO @ID_OPERACION", p).AsQueryable().ToList();
            return resultado;

        }

        public decimal VerificarFacturasCompensadas(int nroFactura)
        {
            var p = new object[] { new SqlParameter("@NRO_FACTURA", nroFactura) };
            decimal resultado = Convert.ToDecimal(ContextoEntidad.ExecuteStoreQuery<TD_VERIFICAR_COMPENSACION>("exec USP_VALIDAR_FACTURA_COMPENSADA @NRO_FACTURA", p).Single().SALDO);
            return resultado;
        }

        public bool ExtornarOperacion(int idOperacion)
        {
            try
            {
                ContextoDeObjs.ExecuteStoreCommand("exec USP_EXTORNAR_COMPENSACION @ID_OPERACION={0}",idOperacion);
                return true;
            }
            catch (Exception)
            {

                return false;
            }
        }

        public List<TD_Facturas_Compensadas> FacturasExtornadas(int idOperacion)
        {

            var p = new object[] { new SqlParameter("@ID_OPERACION", idOperacion) };
            var resultado = ContextoEntidad.ExecuteStoreQuery<TD_Facturas_Compensadas>("exec USP_VERIFICAR_EXTORNO @ID_OPERACION", p).AsQueryable().ToList();
            return resultado;

        }

        public string DesClienteCompensacion(int idOperacion)
        {

            var p = new object[] { new SqlParameter("@ID_OPERACION", idOperacion) };
            var resultado = ContextoEntidad.ExecuteStoreQuery<TD_CLIENTE_BUSCAR>("exec USP_CLIENTE_COMPENSACION @ID_OPERACION", p).Single().DES_CLIENTE;
            return resultado;

        }

        public List<Td_Usuario_Correo> ListarUsuariosCorreo(int id)
        {
            var p = new object[] { new SqlParameter("@ID", id) };
            var resultado = ContextoEntidad.ExecuteStoreQuery<Td_Usuario_Correo>("exec USP_USUARIO_CORREO @ID", p).AsQueryable().ToList();
            return resultado;
        }

        public void SaveTipoCambio(DateTime fecha,decimal impVenta,decimal impCompra)
        {
            ContextoDeObjs.ExecuteStoreCommand("exec USP_SAVE_TIPO_CAMBIO @FECHA={0},@IMP_VENTA={1},@IMP_COMPRA={2}", fecha, impVenta, impCompra);
            
        }

    }
}
